; CyUku/src/core/gui.asm
; VNC GUI实现

section .text
global init_vnc
global create_window
global draw_text

; 初始化VNC连接
init_vnc:
    push rbp
    mov rbp, rsp
    ; 调用libvncclient.so
    mov rax, SYS_LOADLIB
    mov rdi, libvnc_name
    xor rsi, rsi
    syscall
    test rax, rax
    js .error
    
    ; 获取函数地址
    mov [vnc_init_fn], rax
    mov rdi, fn_init_name
    call dlsym
    mov [vnc_init_ptr], rax
    
    ; 初始化VNC连接
    mov rdi, [rbp + 16]  ; 服务器地址
    mov rsi, [rbp + 24]  ; 端口
    call [vnc_init_ptr]
    leave
    ret

; 创建窗口
create_window:
    push rbp
    mov rbp, rsp
    ; 调用X11库
    mov rax, SYS_LOADLIB
    mov rdi, libx11_name
    xor rsi, rsi
    syscall
    
    ; 获取函数地址
    mov [x11_create_fn], rax
    mov rdi, fn_create_name
    call dlsym
    mov [x11_create_ptr], rax
    
    ; 创建窗口
    mov rdi, [rbp + 16]  ; 宽度
    mov rsi, [rbp + 24]  ; 高度
    mov rdx, [rbp + 32]  ; 标题
    call [x11_create_ptr]
    leave
    ret

section .data
    libvnc_name db "libvncclient.so",0
    libx11_name db "libX11.so",0
    fn_init_name db "vnc_client_init",0
    fn_create_name db "XCreateWindow",0
    vnc_init_ptr dq 0
    x11_create_ptr dq 0
    SYS_LOADLIB equ 10